<?php
App::uses('AppModel', 'Model');
App::uses('AuthComponent', 'Controller/Component');

class Shop extends AppModel {
	public function findAllData(){
		return $this->find('all');
	}
	public function updateFieldDeleteTrue($data, $userId = 0){
		$data['Shop']['deleted'] = 1;
		$data['Shop']['updated_by'] = $userId;
		$data['Shop']['updated_at'] = date('Y-m-d H:i:s'); 
		return $this -> save($data);
	}

/**
	 * Get all total shop with every category
	 * @author VuLee
	 */
	public function findAllTotalShop(){
		// Get all categories
		$sql = 'SELECT category_id FROM categories WHERE deleted = 0 ORDER BY root_category_id ASC';

		$category_id_list = $this->query($sql);
		$categories_count = count($category_id_list);

		$sql = 'SELECT id FROM root_categories WHERE deleted = 0 ORDER BY id ASC';
		// Lấy danh sách category_id
		$root_category_id_list = $this->query($sql);

		$sql = 'SELECT COUNT(c.root_category_id) AS counts FROM categories c WHERE c.deleted = 0 GROUP BY c.root_category_id';
		// Lấy số lượng category_id tương ứng với mỗi root_category_id
		$list_count_every_categories = $this->query($sql);

		// Lấy count danh sách số lượng category_id tương ứng với mỗi root_category_id
		$num = number_format($list_count_every_categories[0][0]['counts']);
		$sql = '';
		$count = 0;
		$root_category_id_pos = 0;
		$root_category_id = number_format($root_category_id_list[$root_category_id_pos]["root_categories"]["id"]);

		// Create SQL query get all total shops
	    for ($i = 0; $i < $categories_count; $i++) {
	    	$category_id = number_format($category_id_list[$i]["categories"]["category_id"]);
			if(($i + 1) == ($num + 1)){// Kết thúc tất cả categories của root_categories
				$root_category_id_pos++;// Tăng vị trí của root_categories_id
				++$count;
				$num += number_format($list_count_every_categories[$count][0]['counts']);// Thêm số thứ tự của categories tiếp theo
				if($root_category_id_pos < count($root_category_id_list)){// Đảm bảo vị trí của root_categories_id phải nhỏ hơn số lượng của root_category_id_list
					$root_category_id = number_format($root_category_id_list[$root_category_id_pos]["root_categories"]["id"]);	
				}
			}


	        $sql .= 'SELECT COUNT(*) AS total
	        			, '.$root_category_id.' AS root_category_id
        		  		, c.category_id
        		  		, c.short_link
        		  		, c.category_name
    			  		, r.category_name AS root_category_name

    			  	FROM 
    			  		shops s, 
    			  		categories c, 
    			  		root_categories r
    			  	WHERE s.category_id IN ('.$category_id.') 
    			  		AND c.category_id = '.$category_id.' 
    			  		AND r.id = '.$root_category_id.'
    			  		AND s.deleted = 0
						AND c.deleted = 0
						AND r.deleted = 0';
	        if(($i + 1) != $categories_count){
	            $sql .= ' UNION ALL ';
	        }
	    }
	    $sql = 'SELECT * FROM ( '.$sql.' ) AS h ORDER BY h.root_category_id, h.category_id ASC';
		return $this->query($sql);
	}

	public function findShopById($shopId){
		return $this->find('first',array(
			'conditions' => array('id'=>$shopId,'deleted'=>0)
			));
	}

	public function findShopByCategory($categoryId){
		return $this->find('all',array(
			'conditions' => array('category_id'=>$categoryId,'deleted'=>0)
			));
	}

	/**
	 * @author:QuocTran
	 */
	public function findShopByCreatedId($userId, $shopId = 0){
		$sql = "";
		if ($shopId == 0){
			$sql = array(
				'conditions' => array('Shop.created_by'=>$userId, 'Shop.deleted' =>0)
				);
		}else{
			$sql = array(
				'conditions' => array('Shop.created_by'=>$userId, 'Shop.id'=>$shopId, 'Shop.deleted' =>0)
				);
		}
		return $this->find('first',$sql);
	}

	public $hasMany = array(
        'Product' => array(
            'className' => 'Product',
            'foreignKey' => 'product_id'
        ));
}
